package MIPush;

import java.util.List;
import java.util.Map;

import com.xiaomi.xmpush.server.Constants;
import com.xiaomi.xmpush.server.Message;

public class MessageInfo {

	private String description;// 设置在通知栏展示的通知的描述，不允许全是空白字符，长度小于128，中英文均以一个计算。
	private Map<String, String> extra;// 可选项，对app提供一些扩展的功能。除了这些扩展功能，开发者还可以定义一些key和value来控制客户端的行为。注：key和value的字符数不能超过1024，至多可以设置10个key-value键值对。

	private String payload;// 设置要发送的消息内容payload，不允许全是空白字符，长度小于4K，中英文均以一个计算。(Android专属)
	private String title;// 设置在通知栏展示的通知的标题，不允许全是空白字符，长度小于16，中英文均以一个计算。(Android专属)
	private Integer passThrough;// 设置消息是否通过透传的方式送给app，1表示透传消息，0表示通知栏消息。(Android专属)
	private Integer notifyType;// 设置通知类型，notifyType的值可以是DEFAULT_ALL或者其他几种的OR组合：(Android专属)
	private List<String> packageNames;// 设置app的包名packageName。packageName必须和开发者网站上申请的结果一致。(Android专属)
	private int milliseconds;// 可选项。如果用户离线，设置消息在服务器保存的时间，单位：ms。服务器默认最长保留两周。(Android专属)
	private long timeToSend;// 可选项。定时发送消息。timeToSend是以毫秒为单位的时间戳。注：仅支持七天内的定时消息。(Android专属)
	private Integer notifyId;// 可选项。默认情况下，通知栏只显示一条推送消息。如果通知栏要显示多条推送消息，需要针对不同的消息设置不同的notify_id（相同notify_id的通知栏消息会覆盖之前的）。(Android专属)
	private boolean needFlowControl;// 可选项。控制消息是否需要进行平缓发送（qps,less,3000/second）。默认不支持。(Android专属)

	private String soundURL;// 可选项，自定义消息铃声。(IOS专属)
	private Integer badge;// 可选项，自定义通知数字角标。(IOS专属)
	private String category;// 可选项，iOS8推送消息快速回复类别。(IOS专属)

	public static final int DEFAULT_ALL = Message.NOTIFY_TYPE_ALL; // 使用以下全部默认(Android专属,type常量值)
	public static final int DEFAULT_SOUND = Message.NOTIFY_TYPE_SOUND; // 使用默认提示音提示(Android专属,type常量值)
	public static final int DEFAULT_VIBRATE = Message.NOTIFY_TYPE_VIBRATE; // 使用默认震动提示(Android专属,type常量值)
	public static final int DEFAULT_LIGHTS = Message.NOTIFY_TYPE_LIGHTS; // 使用默认led灯光提示(Android专属,type常量值)

	/**
	 * IOS信息推荐使用的构造方法
	 * 
	 * @param payload
	 *            设置要发送的消息内容payload，不允许全是空白字符，长度小于4K，中英文均以一个计算
	 */
	public MessageInfo(String description) {
		this.description = description;
	}

	/**
	 * 安卓信息推荐使用的构造方法
	 * 
	 * @param payload
	 *            设置要发送的消息内容payload，不允许全是空白字符，长度小于4K，中英文均以一个计算
	 * @param title
	 *            设置在通知栏展示的通知的标题，不允许全是空白字符，长度小于16，中英文均以一个计算。
	 * @param description
	 *            设置在通知栏展示的通知的描述，不允许全是空白字符，长度小于128，中英文均以一个计算。
	 * @param passThrough
	 *            设置消息是否通过透传的方式送给app，1表示透传消息，0表示通知栏消息。(Android专属)
	 * @param type
	 *            设置通知类型，type的值可以是DEFAULT_ALL或者其他几种的OR组合：(Android专属)
	 * @param packageNames
	 *            设置app的包名packageName。packageName必须和开发者网站上申请的结果一致。(Android专属)
	 */
	public MessageInfo(String payload, String title, String description, Integer passThrough, Integer notifyType,
			List<String> packageNames) {
		this.payload = payload;
		this.title = title;
		this.passThrough = passThrough;
		this.description = description;
		this.notifyType = notifyType;
		this.packageNames = packageNames;
	}

	public String getPayload() {
		return payload;
	}

	public void setPayload(String payload) {
		this.payload = payload;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public Map<String, String> getExtra() {
		return extra;
	}

	public void setExtra(Map<String, String> extra) {
		this.extra = extra;
	}

	public Integer getPassThrough() {
		return passThrough;
	}

	public void setPassThrough(Integer passThrough) {
		this.passThrough = passThrough;
	}

	public Integer getNotifyType() {
		return notifyType;
	}

	public void setNotifyType(Integer notifyType) {
		this.notifyType = notifyType;
	}

	public List<String> getPackageNames() {
		return packageNames;
	}

	public void setPackageNames(List<String> packageNames) {
		this.packageNames = packageNames;
	}

	public int getMilliseconds() {
		return milliseconds;
	}

	public void setMilliseconds(int milliseconds) {
		this.milliseconds = milliseconds;
	}

	public long getTimeToSend() {
		return timeToSend;
	}

	public void setTimeToSend(long timeToSend) {
		this.timeToSend = timeToSend;
	}

	public Integer getNotifyId() {
		return notifyId;
	}

	public void setNotifyId(Integer notifyId) {
		this.notifyId = notifyId;
	}

	public boolean isNeedFlowControl() {
		return needFlowControl;
	}

	public void setNeedFlowControl(boolean needFlowControl) {
		this.needFlowControl = needFlowControl;
	}

	public String getSoundURL() {
		return soundURL;
	}

	public void setSoundURL(String soundURL) {
		this.soundURL = soundURL;
	}

	public Integer getBadge() {
		return badge;
	}

	public void setBadge(Integer badge) {
		this.badge = badge;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

}
